<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>类中的方法this指向</title>
</head>
<body>
    <script type="text/javascript">
        // 创建一个person类
        class Person{
            // 构造器方法
            constructor(name, age){
                // 构造器中的this是谁？- 类的实例对象
                this.name = name
                this.age = age
            }
            // 一般方法
            speak(){
                // speak方法放到了哪里？ - 类的原型对象上，供实例使用
                // 通过Person实例调用speak时，speak中的this就是Person实例
                console.log(`我叫${this.name}, 我的年龄是${this.age}`)
            }
        }
        // 创建一个Person的实例对象
        const p1 = new Person('tom', 18)
        p1.speak()  // 通过实例调用
       
        // const x = p1.speak
        // x()  // 直接调用， this指向undefind

        const n = p1.speak.bind({
            name: '1',
            age: '12'
        }) // bind生成新函数 this重新指向
        n()
    //   function demo() {
    //     'use strict'  // 开启严格模式，this指向undefind
    //     console.log(this)
    //   }

    //   function demo2(){
    //     console.log(this)  // this指向window
    //   }

    //   demo()
    //   demo2()

    </script>
</body>
</html>